/*
 * Copyright (c) 2025 Li Auto Inc. and its affiliates
 * Licensed under the Apache License, Version 2.0(the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
 * Copyright (C) 2024 理想汽车股份有限公司版权所有.
 * Description:  文件描述, 说明此文件作用. 
 */
{%- set pdur_bsw_modules = get_pdur_bsw_modules_routing_config() %}
{%- set LoIf_module_list = pdur_bsw_modules['LoIf_module_list'] %}
{%- set LoIf_withoutIf_module_list = pdur_bsw_modules['LoIf_withoutIf_module_list'] %}
{%- set LoIf_withIf_module_list = pdur_bsw_modules['LoIf_withIf_module_list'] %}
{%- set LoTp_withoutTp_module_list = pdur_bsw_modules['LoTp_withoutTp_module_list'] %}
{%- set LoTp_withTp_module_list = pdur_bsw_modules['LoTp_withTp_module_list'] %}
{%- set UpTT_module_list = pdur_bsw_modules['UpTT_module_list'] %}
{%- set LoTp_module_list = pdur_bsw_modules['LoTp_module_list'] %}
{%- set UpTp_module_list = pdur_bsw_modules['UpTp_module_list'] %}
{%- set UpIf_module_list = pdur_bsw_modules['UpIf_module_list'] %}
{%- set cancel_recv_module_list = pdur_bsw_modules['cancel_recv_module_list'] %}
{%- set cancel_tran_module_list = pdur_bsw_modules['cancel_tran_module_list'] %}

/* Including File */
#include "pdur_routingcfg.h"
{%- set pdur_bsw_modules_include = get_pdur_bsw_modules_config() %}
{%- for module_name_include in pdur_bsw_modules_include %}
#include "{{module_name_include | lower}}.h"
{%- endfor %}
/* Local Macro Definition */
{{  ("%-60s" | format("#define PDUR_ROUTE_TRANSMIT_TABLE_LEN"))}} {{pdur_bsw_modules['Lo_module_length']}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_TRIGGERTRANSMIT_TABLE_LEN"))}} {{UpTT_module_list | length}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_RXINDICATION_TABLE_LEN"))}} {{UpIf_module_list | length}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_TPRXINDICATION_TABLE_LEN"))}} {{UpTp_module_list | length}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_TXCONFIRMATION_TABLE_LEN"))}} {{UpIf_module_list | length}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_TPTXCONFIRMATION_TABLE_LEN"))}} {{UpTp_module_list | length}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_COPYRXDATA_TABLE_LEN"))}} {{UpTp_module_list | length}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_COPYTXDATA_TABLE_LEN"))}} {{UpTp_module_list | length}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_STARTOFRECEPTION_TABLE_LEN"))}} {{UpTp_module_list | length}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_CANCELTRANSMIT_TABLE_LEN"))}} {{cancel_recv_module_list | length}}u
{{  ("%-60s" | format("#define PDUR_ROUTE_CANCELRECEIVE_TABLE_LEN"))}} {{cancel_tran_module_list | length}}u

/* Local Enumeration Definition */

/* Local Type & Structure Definition */

/* Global Variable Definition */
/* IF和TP类型Transmit函数指针表 */
{%- if (pdur_bsw_modules['Lo_module_length'] != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_transmit_func_table_type pdur_route_transmit_func_table[PDUR_ROUTE_TRANSMIT_TABLE_LEN] = {
{%- for module_name in LoIf_withoutIf_module_list %}
{%- if (module_name == 'CanNm') or (module_name == 'CanIf')%}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_transmit,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- else %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_transmit,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endif %}
{%- endfor %}
{%- for module_name in LoIf_withIf_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "transmit,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
{%- for module_name in LoTp_withoutTp_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_transmit,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
{%- for module_name in LoTp_withTp_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "transmit,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* IF类型TriggerTransmit函数指针表 */
{%- if (UpTT_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_trigger_transmit_func_table_type pdur_route_trigger_transmit_func_table[PDUR_ROUTE_TRIGGERTRANSMIT_TABLE_LEN] = {
{%- for module_name in UpTT_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~  module_name| lower ~ "_trigger_transmit,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* IF类型RxIndication函数指针表 */
{%- if (UpIf_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_rx_indication_func_table_type pdur_route_rx_indication_func_table[PDUR_ROUTE_RXINDICATION_TABLE_LEN] = {
{%- for module_name in UpIf_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_rx_indication,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* TP类型RxIndication函数指针表 */
{%- if (UpTp_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_tp_rx_indication_func_table_type pdur_route_tp_rx_indication_func_table[PDUR_ROUTE_TPRXINDICATION_TABLE_LEN] = {
{%- for module_name in UpTp_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_tp_rx_indication,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* IF类型TxConfirmation函数指针表 */
{%- if (UpIf_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_tx_confirmation_func_table_type pdur_route_tx_confirmation_func_table[PDUR_ROUTE_TXCONFIRMATION_TABLE_LEN] = {
{%- for module_name in UpIf_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_tx_confirmation,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* TP类型TxConfirmation函数指针表 */
{%- if (UpTp_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_tp_tx_confirmation_func_table_type pdur_route_tp_tx_confirmation_func_table[PDUR_ROUTE_TPTXCONFIRMATION_TABLE_LEN] = {
{%- for module_name in UpTp_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_tp_tx_confirmation,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* TP类型CopyRxData函数指针表 */
{%- if (UpTp_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_copy_rx_data_func_table_type pdur_route_copy_rx_data_func_table[PDUR_ROUTE_COPYRXDATA_TABLE_LEN] = {
{%- for module_name in UpTp_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_copy_rx_data,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* TP类型CopyTxData函数指针表 */
{%- if (UpTp_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_copy_tx_data_func_table_type pdur_route_copy_tx_data_func_table[PDUR_ROUTE_COPYTXDATA_TABLE_LEN] = {
{%- for module_name in UpTp_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_copy_tx_data,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* TP类型StartOfReception函数指针表 */
{%- if (UpTp_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_start_of_reception_func_table_type pdur_route_start_of_reception_func_table[PDUR_ROUTE_STARTOFRECEPTION_TABLE_LEN] = {
{%- for module_name in UpTp_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_start_of_reception,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* CancelTransmit函数指针表 */
{%- if (cancel_recv_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_cancel_transmit_func_table_type pdur_routes_cancel_transmit_func_table[PDUR_ROUTE_CANCELTRANSMIT_TABLE_LEN] = {
{%- for module_name in cancel_recv_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_cancel_transmit,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* CancelReceive函数指针表 */
{%- if (cancel_tran_module_list | length != 0) %}
#define PDUR_START_SEC_CONST
#include "pdur_memmap.h"
static const pdur_route_cancel_receive_func_table_type pdur_routes_cancel_receive_func_table[PDUR_ROUTE_CANCELRECEIVE_TABLE_LEN] = {
{%- for module_name in cancel_tran_module_list %}
    {{'{'}}{{  ("%-30s" | format("&" ~ module_name | lower ~ "_cancel_receive,"))}} PDUR_{{module_name.upper()}}{{"},"}}
{%- endfor %}
};
#define PDUR_STOP_SEC_CONST
#include "pdur_memmap.h"
{%- endif %}

/* Local Variable Definition */

/* Local Function Declaration */

/* Local Function Implementation */

/* Global Function Implementation */
#define PDUR_START_SEC_CODE
#include "pdur_memmap.h"
FUNC_P2CONST(pdur_route_transmit_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_transmit_func_table(void)
{
{%- if (pdur_bsw_modules['Lo_module_length'] != 0) %}
    return &pdur_route_transmit_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_trigger_transmit_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_trigger_transmit_func_table(void)
{
{%- if (UpTT_module_list | length != 0) %}
    return &pdur_route_trigger_transmit_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_rx_indication_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_rx_indication_func_table(void)
{
{%- if (UpIf_module_list | length != 0) %}
    return &pdur_route_rx_indication_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_tp_rx_indication_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_tp_rx_indication_func_table(void)
{
{%- if (UpTp_module_list | length != 0) %}
    return &pdur_route_tp_rx_indication_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_tx_confirmation_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_tx_confirmation_func_table(void)
{
{%- if (UpIf_module_list | length != 0) %}
    return &pdur_route_tx_confirmation_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_tp_tx_confirmation_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_tp_tx_confirmation_func_table(void)
{
{%- if (UpTp_module_list | length != 0) %}
    return &pdur_route_tp_tx_confirmation_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_copy_rx_data_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_copy_rx_data_func_table(void)
{
{%- if (UpTp_module_list | length != 0) %}
    return &pdur_route_copy_rx_data_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_copy_tx_data_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_copy_tx_data_func_table(void)
{
{%- if (UpTp_module_list | length != 0) %}
    return &pdur_route_copy_tx_data_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_start_of_reception_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_start_of_reception_func_table(void)
{
{%- if (UpTp_module_list | length != 0) %}
    return &pdur_route_start_of_reception_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_cancel_transmit_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_cancel_transmit_func_table(void)
{
{%- if (cancel_recv_module_list | length != 0) %}
    return &pdur_routes_cancel_transmit_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC_P2CONST(pdur_route_cancel_receive_func_table_type, AUTOMATIC, PDUR_CODE) pdur_get_route_cancel_receive_func_table(void)
{
{%- if (cancel_tran_module_list | length != 0) %}
    return &pdur_routes_cancel_receive_func_table[0];
{%- else %}
    return NULL;
{%- endif %}
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_transmit_func_table(void)
{
    return PDUR_ROUTE_TRANSMIT_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_trigger_transmit_func_table(void)
{
    return PDUR_ROUTE_TRIGGERTRANSMIT_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_rx_indication_func_table(void)
{
    return PDUR_ROUTE_RXINDICATION_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_tp_rx_indication_func_table(void)
{
    return PDUR_ROUTE_TPRXINDICATION_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_tx_confirmation_func_table(void)
{
    return PDUR_ROUTE_TXCONFIRMATION_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_tp_tx_confirmation_func_table(void)
{
    return PDUR_ROUTE_TPTXCONFIRMATION_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_copy_rx_data_func_table(void)
{
    return PDUR_ROUTE_COPYRXDATA_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_copy_tx_data_func_table(void)
{
    return PDUR_ROUTE_COPYTXDATA_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_start_of_reception_func_table(void)
{
    return PDUR_ROUTE_STARTOFRECEPTION_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_cancel_transmit_func_table(void)
{
    return PDUR_ROUTE_CANCELTRANSMIT_TABLE_LEN;
}

FUNC(uint8, PDUR_CODE) pdur_get_len_of_route_cancel_receive_func_table(void)
{
    return PDUR_ROUTE_CANCELRECEIVE_TABLE_LEN;
}
#define PDUR_STOP_SEC_CODE
#include "pdur_memmap.h"